草庐IT

c++ - 在 C++ 中检测 youtube 的全屏模式

我期待以某种方式在C++中检测用户是否在全屏模式下拥有一些网络应用程序,例如Youtube。这样我就可以避免显示焦点通知,因此不会打扰用户。编辑1应支持WindowsXPSPIII及更高版本(或至少支持适用于Win7及更高版本。) 最佳答案 以下代码来自http://www.deanlee.cn/windows/how-to-detect-whether-or-not-user-is-running-a-full-screen-program/.boolIsFullScreenMode(){intw=GetSystemMetrics

c++ - 如何知道所使用的微软 C runtime 的版本?

我有一个依赖于MSVCR90.dll的程序,我将它与主要可执行文件一起提供的库包括:ProgramFolder\Main.exeProgramFolder\MSVCR90.dll我想知道是否有新的更新可用(例如修复安全问题),我提供的更新是否优先于System32或SxS.有没有办法以编程方式知道正在使用哪个版本的C运行时? 最佳答案 您可以查看executablesimportheader查找它引用了哪个版本的C运行时。将其从system32目录中删除无济于事,反而会造成崩溃。 关于c

c++ - 将对象交换到文件

由于从数据库中检索大量数据,我的C++应用程序有时会耗尽内存。它必须在32位WinXP机器上运行。是否可以透明地(对于大多数现有代码)将数据对象换出到磁盘并仅在需要时将它们读入内存,所以我不限于32位的2GBWindows给进程?我看过VirtualAlloc和AddressWindowExtensions但我不确定这是我想要的。我还找到了thisSOquestion发问者在其中创建文件映射并希望在其中创建对象。一个答案建议使用placementnew,这听起来对其余代码来说是非常透明的。这会阻止我的应用程序耗尽物理内存吗?我不是很确定,因为毕竟还有32位地址空间限制。或者这是在尝试创

c++ - 如何使进程 B 仅在进程 A 处于事件状态时运行

我有一个启动另一个进程B的进程A。当前,进程B在退出之前等待由进程“A”发出的信号(WaitForSingleObject),一旦设置了信号,进程B就会退出。但是,当进程A意外终止或崩溃时,我最终进程B仍在运行。我怎样才能让B无限期地等待信号,除非进程A崩溃了?换句话说..进程B应该只在进程A运行之前保持事件状态。谢谢 最佳答案 WaitForSingleObject在进程A的进程句柄上;它会在A死亡时发出信号。另一种方法是将B作为调试器附加到A。然后您将在进程退出时收到一个事件,并且可以完美同步退出。

c++ - Windows 服务停留在启动状态

我有一个用CPP编写的手动启动的Windows服务。该服务启动得很好并且工作正常。但是,我们最近在Windows服务GUI中注意到该服务显示为正在启动状态。检查事件查看器后,它清楚地显示服务已进入运行状态。有人在这上面得到了金block吗?谢谢。 最佳答案 问题原来是调用SCM启动服务的原因不明。删除该行,问题就消失了。 关于c++-Windows服务停留在启动状态,我们在StackOverflow上找到一个类似的问题: https://stackoverfl

两个线程能否同时读取同一个const内存块

内存块在程序开始时被初始化和设置并且没有改变(CONST)。例如:静态常量inta=10;如果它依赖于环境/架构,那么这些设置是否安全:英特尔/AMDWin/Linux32/64位每个核心的线程或一个核心的所有线程。 最佳答案 对于所有架构读取const都是安全的 关于两个线程能否同时读取同一个const内存块,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/12337926/

c++ - 使用 OLE 剪贴板和经典剪贴板时出现意外/奇怪的结果,还是我错过了什么?

我正在尝试执行以下技巧:我要将IDataObject*设置到剪贴板中,所以我使用OleSetClipboard()将其设置到剪贴板中。我有另一个CLIPFORMAT我想添加到剪贴板,但我不能用OleSetClipboard()来做,因为IDataObject*我收到的未实现SetData()方法。所以,为了克服这个限制,我用GetClipboardOwner()OpenClipboard(),这样,我可以SetClipboardData()到剪贴板而不用EmptyClipboard()首先。现在,一切正常,但OleGetClipboard()没有返回我使用SetClipboardDat

c++ - winapi - 清除 CBitmap 的区域

我有一个32位的CBitmap缓冲区,我在上面做AlphaBlend事情。但是我想知道是否有一种方法可以完全“清除”CBitmap的矩形区域(如将特定区域中像素的所有Alpha值设置为0或完全清除该区域)。我不能使用GDI+! 最佳答案 没有“清除”位图这样的事情。您只需更改像素的颜色。如果将“清晰”定义为纯黑色,则将像素设置为黑色。最简单的方法是使用CDC::FillRect. 关于c++-winapi-清除CBitmap的区域,我们在StackOverflow上找到一个类似的问题:

c++ - 使用 native /C++ 代码在 VS2010 中创建简单 COM 对象的最简单方法是什么?

这是我发布的先前问题的后续问题(请参阅here)。我正在尝试从在HTML页面中运行的Javascript调用我的native/C++代码。所引用问题的答案是创建一个COM对象。然后,Javascript可以创建COM对象的实例并调用其上的方法以获取native/C++代码。所以现在我只剩下尝试创建一个简单的COM对象来接受来自Javascript的调用。看起来要走的路是创建一个DLL并将COM对象放入该DLL中。多年前,我阅读了大量有关COM的书籍,但从那时起就试图忘记它:)现在我很头疼,想知道如何在不成为COM专家的情况下轻松地解决这个问题。是否有推荐的使用COM对象设置DLL的简单

c++ - 如何复制当前进程?

复制当前进程以在Windows中生成另一个实例的最简单方法是什么?我知道Linux有fork(),但我只需要在同一进程中再次运行main,可能使用带有正确参数的CreateProcess()。 最佳答案 正如@DavidHeffernan评论的那样:STARTUPINFOsi;::memset(&si,0,sizeof(si));si.cb=sizeof(si);PROCESS_INFORMATIONpi;::CreateProcess(NULL,::GetCommandLine(),NULL,NULL,FALSE,0,NULL,N